package com.jereh.topnews.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;

import com.jereh.topnews.R;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 * 打开本地已经存在的数据库，把他创建在应用内存当中
 * Created by Administrator on 2016/11/28.
 */
public class DBUtils {
    //数据库名称
    private static final String dbName="demo.db";
    //系统内存路径
    private static String dbPath="";

    private Context ctx;

    public DBUtils(Context ctx) {
        this.ctx=ctx;
        //得到系统内存路径
        dbPath=ctx.getFilesDir().getAbsolutePath();
    }

    /**
     * 获取一个可用的数据库连接对象
     * @return
     */
    public SQLiteDatabase getDatabase() {
        //创建或打开数据库的根目录
        File dir=new File(dbPath,"db");
        //判断数据库根目录是否存在，如果不存在就新建一个数据库根目录
        if(!dir.exists()) {
            dir.mkdir();
        }
        //创建或打开数据库文件
        File db=new File(dir,dbName);
        if(!db.exists()) {
            //如果本地数据库不存在，把程序资源文件夹下的数据库复制出一个新的，保存到内存中
            InputStream is=ctx.getResources().openRawResource(R.raw.demo);
            //一边读取资源文件夹下的数据库文件，一边写入到本地内存当中
            try {
                FileOutputStream fos=new FileOutputStream(db);
                //以1kb单位进行读取
                byte[] b=new byte[1024];
                int length=0;
                while ((length=is.read(b))>0) {
                    fos.write(b,0,length);
                }
                fos.flush();
                fos.close();
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        //得到一个实例化的db数据库
        return SQLiteDatabase.openDatabase(db.getAbsolutePath(),null,SQLiteDatabase.OPEN_READWRITE);
    }

}
